<!DOCTYPE HTML>
<html>
<head>
  <title>Test ScriptProcessorNode playbackTime for bug 970773</title>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">

SimpleTest.waitForExplicitFinish();

var context = new AudioContext();
const delay = 0.1;

function doTest() {
  const processorBufferLength = 256;
  // |currentTime| may include double precision floating point
  // rounding errors, so round to nearest integer sample to ignore these.
  var minimumPlaybackSample =
    Math.round(context.currentTime * context.sampleRate) +
    processorBufferLength;
  var sp = context.createScriptProcessor(processorBufferLength);
  sp.connect(context.destination);
  sp.onaudioprocess =
    function(e) {
      is(e.inputBuffer.length, processorBufferLength,
         "expected buffer length");
      var playbackSample = Math.round(e.playbackTime * context.sampleRate)
      ok(playbackSample >= minimumPlaybackSample,
         "playbackSample " + playbackSample +
         " beyond expected minimum " + minimumPlaybackSample);
      sp.onaudioprocess = null;
      SimpleTest.finish();
    };
}

// Wait until AudioDestinationNode has accumulated enough 'extra' time so that
// a failure would be easily detected.
(function waitForExtraTime() {
  if (context.currentTime < delay) {
    SimpleTest.executeSoon(waitForExtraTime);
  } else {
    doTest();
  }
})();

</script>
</pre>
</body>
</html>
